﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DelegatePractise.one
{

    // 定义委托类型（方法签名契约）
    delegate int MathOperation(int a, int b);

    internal class DelegateUseLikeFunction
    {
        public void Demo101()
        {
            // 具体方法
            int Add(int x, int y) => x + y;
            int Multiply(int x, int y) => x * y;

            // 将方法赋值给委托变量（类似“函数作为值”）
            MathOperation op = Add;
            Console.WriteLine(op(2, 3)); // 输出 5

            op = Multiply;
            Console.WriteLine(op(2, 3)); // 输出 6

            CalculateAndPrint(2, 3, Add); // 输出 5
        }

        // 委托作为方法参数（类似“函数作为参数”）
        void CalculateAndPrint(int a, int b, MathOperation operation)
        {
            Console.WriteLine(operation(a, b));
        }
    }
}
